Security News
PyPI Introduces Digital Attestations to Strengthen Python Package Security
PyPI now supports digital attestations, enhancing security and trust by allowing package maintainers to verify the authenticity of Python packages.
JavaScript/TypeScript library to manipulate bits, nibbles, bytes, and buffers.
import bitwise from 'bitwise'
const bits = bitwise.byte.read(42)
// [0, 0, 1, 0, 1, 0, 1, 0]
bitwise.bits.toString(bits, 4)
// '0010 1010'
bitwise.byte.write(bits)
// 42
bitwise.bits.and([0, 0, 1, 1], [0, 1, 0, 1])
// [0, 0, 0, 1]
bitwise.bits.xor([0, 0, 1, 1], [0, 1, 0, 1])
// [0, 1, 1, 0]
// cherry-pick parts of bitwise
import byte from 'bitwise/byte'
byte.read(42)
// [0, 0, 1, 0, 1, 0, 1, 0]
bun add bitwise
or
yarn add bitwise
or
npm install --save bitwise
// cherry-pick
import and from 'bitwise/bits/and'
import bits from 'bitwise/bits'
import toString from 'bitwise/bits/to-string'
(bits1: Array<0|1>, bits2: Array<0|1>): Array<0|1>
Applies the bitwise AND
operation, expects two arrays of the same size and returns a new one.
bitwise.bits.and([1, 0, 0, 0, 1, 1, 0, 1], [0, 1, 1, 0, 0, 1, 0, 0])
// [0, 0, 0, 0, 0, 1, 0, 0]
(bits: Array<0|1>, amount: number): Array<0|1>
Applies the bitwise ROL
operation, expects two arrays of the same size and a shift amount and returns a new one.
bitwise.bits.circularShiftLeft([0, 0, 0, 1, 1, 1, 1, 1], 1)
// [0, 0, 1, 1, 1, 1, 1, 0]
(bits: Array<0|1>, amount: number): Array<0|1>
Applies the bitwise ROR
operation, expects two arrays of the same size and a shift amount and returns a new one.
bitwise.bits.circularShiftRight([0, 0, 0, 1, 1, 1, 1, 1], 1)
// [1, 0, 0, 0, 1, 1, 1, 1]
(bits1: Array<0|1>, bits2: Array<0|1>): Array<0|1>
Applies the bitwise NAND
operation, expects two arrays of the same size and returns a new one.
bitwise.bits.nand([1, 0, 0, 0, 1, 1, 0, 1], [0, 1, 1, 0, 0, 1, 0, 0])
// [1, 1, 1, 0, 1, 0, 0, 1]
(bits1: Array<0|1>, bits2: Array<0|1>): Array<0|1>
Applies the bitwise NOR
operation, expects two arrays of the same size and returns a new one.
bitwise.bits.nor([1, 0, 0, 0, 1, 1, 0, 1], [0, 1, 1, 0, 0, 1, 0, 0])
// [1, 1, 1, 0, 1, 0, 0, 1]
(bits: Array<0|1>): Array<0|1>
Flips all given bits and returns the flipped bits.
bitwise.bits.not([1, 0, 1, 1, 0, 1])
// [0, 1, 0, 0, 1, 0]
(bits1: Array<0|1>, bits2: Array<0|1>): Array<0|1>
Applies the bitwise OR
operation, expects two arrays of the same size and returns a new one.
bitwise.bits.or([1, 0, 0, 0, 1, 1, 0, 1], [0, 1, 1, 0, 0, 1, 0, 0])
// [1, 1, 1, 0, 1, 1, 0, 1]
(bits1: Array<0|1>, bits2: Array<0|1>): Array<0|1>
Applies the bitwise exclusive NOR
operation, expects two arrays of the same size and returns a new one.
bitwise.bits.xnor([1, 0, 0, 0, 1, 1, 0, 1], [0, 1, 1, 0, 0, 1, 0, 0])
// [1, 1, 1, 0, 1, 0, 0, 1]
(bits1: Array<0|1>, bits2: Array<0|1>): Array<0|1>
Applies the bitwise exclusive OR
operation, expects two arrays of the same size and returns a new one.
bitwise.bits.xor([1, 0, 0, 0, 1, 1, 0, 1], [0, 1, 1, 0, 0, 1, 0, 0])
// [1, 1, 1, 0, 1, 0, 0, 1]
(bits: Array<0|1>): 0|1
Applies the bitwise AND
operation on the given bits. Returns one bit. Throws if less than 2 bits are given.
bitwise.bits.reduceAnd([1, 0, 0, 0, 1, 1, 0, 1])
// 0
(bits: Array<0|1>): 0|1
Applies the NAND
operation on the given bits. Returns one bit. Throws if less than 2 bits are given.
bitwise.bits.reduceNand([1, 0, 0, 0, 1, 1, 0, 1])
// 0
(bits: Array<0|1>): 0|1
Applies the NOR
operation on the given bits. Returns one bit. Throws if less than 2 bits are given.
bitwise.bits.reduceNor([1, 0, 0, 0, 1, 1, 0, 1])
// 0
(bits: Array<0|1>): 0|1
Applies the OR
operation on the given bits. Returns one bit.
Throws if less than 2 bits are given.
bitwise.bits.reduceOr([1, 0, 0, 0, 1, 1, 0, 1])
// 1
(bits: Array<0|1>): 0|1
Applies the XNOR
operation on the given bits. Returns one bit. Throws if less than 2 bits are given.
bitwise.bits.reduceXnor([1, 0, 0, 0, 1, 1, 0, 1])
// 1
(bits: Array<0|1>): 0|1
Applies the XOR
operation on the given bits. Returns one bit.
Throws if less than 2 bits are given.
bitwise.bits.reduceXor([1, 0, 0, 0, 1, 1, 0, 1])
// 0
(bits: Array<0|1>): Array<boolean>
Converts a bit array to a boolean array.
bitwise.bits.toBoolean([0, 1])
// [false, true]
(bits: Array<0|1>, spacing: number = 0, spacer: string = ' '): string
Converts a bit Array
to a String
. If defined, inserts spacer
every spacing
characters, but never inserts it as the last substring.
bitwise.bits.toString([1, 0, 1, 0, 1, 0], 2, '_')
// '10_10_10'
// cherry-pick
import and from 'bitwise/buffer/and'
import buffer from 'bitwise/buffer'
import create from 'bitwise/buffer/create'
(bits: Array<0|1>): Buffer
Creates a new buffer and writes the given bits.
const buffer = bitwise.buffer.create([1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0])
// Buffer(1111 0001 1010 0000)
(buffer: Buffer, newBits: Array<0|1>, bitOffset: number = 0): void
Modifies the buffer's bits to equal newBits
starting at bitOffset
.
const buffer = Buffer.from('A43A', 'hex')
bitwise.buffer.modify(buffer, [0, 0, 0, 1, 0, 0, 1], 3)
// Buffer(1010 1001 0011 1010)
(buffer1: Buffer, buffer2: Buffer, isLooping = false): Buffer
Applies a bitwise AND
with buffer2
to every value in buffer1
. Returns a new buffer. If isLooping
is set, buffer1
may be read multiple times in case it's shorter than buffer2
.
bitwise.buffer.and(buffer1, buffer2, false)
// Buffer(buffer1 AND buffer2)
(buffer1: Buffer, buffer2: Buffer, isLooping = false): Buffer
Applies a bitwise NAND
with buffer2
to every value in buffer1
. Returns a new buffer. If isLooping
is set, buffer1
may be read multiple times in case it's shorter than buffer2
.
bitwise.buffer.nand(buffer1, buffer2, false)
// Buffer(buffer1 NAND buffer2)
(buffer1: Buffer, buffer2: Buffer, isLooping = false): Buffer
Applies a bitwise NOR
with buffer2
to every value in buffer1
. Returns a new buffer. If isLooping
is set, buffer1
may be read multiple times in case it's shorter than buffer2
.
bitwise.buffer.nor(buffer1, buffer2, false)
// Buffer(buffer1 NOR buffer2)
(buffer: Buffer): Buffer
Flips all bits in the given buffer.
bitwise.buffer.not(buffer, false)
// Buffer(NOT buffer)
(buffer1: Buffer, buffer2: Buffer, isLooping = false): Buffer
Applies a bitwise OR
with buffer2
to every value in buffer1
. Returns a new buffer. If isLooping
is set, buffer1
may be read multiple times in case it's shorter than buffer2
.
bitwise.buffer.or(buffer1, buffer2, false)
// Buffer(buffer1 OR buffer2)
(buffer1: Buffer, buffer2: Buffer, isLooping = false): Buffer
Applies a bitwise XNOR
with buffer2
to every value in buffer1
. Returns a new buffer. If isLooping
is set, buffer1
may be read multiple times in case it's shorter than buffer2
.
bitwise.buffer.xnor(buffer1, buffer2, false)
// Buffer(buffer1 XNOR buffer2)
(buffer1: Buffer, buffer2: Buffer, isLooping = false): Buffer
Applies a bitwise XOR
with buffer2
to every value in buffer1
. Returns a new buffer. If isLooping
is set, buffer1
may be read multiple times in case it's shorter than buffer2
.
bitwise.buffer.xor(buffer1, buffer2, false)
// Buffer(buffer1 XOR buffer2)
(buffer: Buffer, bitOffset: number = 0, bitLength?: number): Array<0|1>
Returns an Array containing bitLength
bits starting at bitOffset
. If no bitLength
is given, it's assumed to be the rest of the buffer.
const buffer = Buffer.from('ED743E17', 'hex')
bitwise.buffer.read(buffer, 12)
// [0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1]
(buffer: Buffer, bitOffset: number = 0, bitLength: number = 8): number
Converts a section of a buffer to a signed integer.
// buffer 11110110
bitwise.buffer.readInt(buffer, 3, 5)
// -10
(buffer: Buffer, bitOffset: number = 0, bitLength: number = 8): number
Converts a section of a buffer to an unsigned integer.
// buffer 11110110
bitwise.buffer.readUInt(buffer, 3, 5)
// 22
// cherry-pick
import byte from 'bitwise/byte'
import read from 'bitwise/byte/read'
(byte: UInt8): Array<0|1>
Returns an Array of length 8 containing the read bits.
bitwise.byte.read(42)
// [0, 0, 1, 0, 1, 0, 1, 0]
bitwise.byte.read(256)
// RangeError('invalid size')
(bits: Array<0|1>): UInt8
Returns a Byte (0-255) which represents the given bits.
bitwise.byte.write([0, 0, 1, 0, 1, 0, 1, 0])
// 42
bitwise.byte.write([0, 0, 1, 0, 1, 0, 1, 0, 0])
// RangeError('invalid array length')
// cherry-pick
import integer from 'bitwise/integer'
(number: number, position: number): 0|1
Gets the value of a specific bit.
bitwise.integer.getBit(128, 7)
// 1
(number: number, position: number, value: 0|1): Array<0|1>
Sets the value of a specific bit.
bitwise.integer.setBit(128, 7, 0)
// 0
(number: number, position: number): Array<0|1>
Toggles the value of a specific bit.
bitwise.integer.toggleBit(128, 7)
// 0
// cherry-pick
import nibble from 'bitwise/nibble'
import read from 'bitwise/nibble/read'
(nibble: UInt4): Array<0|1>
Returns an Array of length 4 containing the read bits.
bitwise.nibble.read(15)
// [1, 1, 1, 1]
bitwise.nibble.read(42)
// RangeError('invalid size')
(nibble: [<0|1>, <0|1>, <0|1>, <0|1>]): UInt4
Returns a Nibble (0-15
) which represents the given bits.
bitwise.nibble.write([0, 0, 1, 0])
// 2
bitwise.nibble.write([0, 0, 1, 0, 1])
// RangeError('invalid array length')
// cherry-pick
import string from 'bitwise/string'
import toBits from 'bitwise/string/to-bits'
(string: string): Array<0|1>
Converts a string into an array of bits. Ignores all characters except 1
and 0
.
bitwise.string.toBits('10 10 12$%_.0')
// [1, 0, 1, 0, 1, 0]
bitwise
uses bun
instead of node
# install dependencies
bun install
# run tests
bun test
# build
bun run build
typescript
from dependencies
in favor of devDependencies
bun
bits.circularShiftLeft
(#44 / #49) via @0xflotusbits.circularShiftRight
(#44 / #49) via @0xflotusbitwise.buffer.readCInt()
require()
supportbits.toBoolean
bits.reduceAnd
bits.reduceNand
bits.reduceNor
bits.reduceOr
bits.reduceXnor
bits.reduceXor
buffer.operations
bits.operations
integer.getBit
integer.setBit
integer.toggleBit
FAQs
Manipulates bits, nibbles, bytes, and buffers.
We found that bitwise demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
PyPI now supports digital attestations, enhancing security and trust by allowing package maintainers to verify the authenticity of Python packages.
Security News
GitHub removed 27 malicious pull requests attempting to inject harmful code across multiple open source repositories, in another round of low-effort attacks.
Security News
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.